package com.tosee.logic.controle;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import com.tosee.exception.ConteneurException;
import com.tosee.exception.GeneriqueException;
import com.tosee.exception.MetierException;
import com.tosee.model.dbTosee.User;
import com.tosee.model.dto.UserDto;
import com.tosee.utils.MessageHandler;
import com.tosee.utils.Utils;

/**
 * Controles utilisateur
 * 
 * @author robint
 */
@Service
public final class UserControle extends AbstractControle {

    /**
     * Methode de controle des utilisateurs
     * 
     * @param _user L'utilisateur à controler
     * @throws GeneriqueException L'exception
     */
    public void controlerUtilisateur(UserDto _user) throws GeneriqueException {

        ConteneurException conteneurException = new ConteneurException();

        // Controler unicité login
        User user = getDaoProvider().getUserDao().getUserByLogin(_user.getLogin());
        if(user != null) {
            conteneurException.ajouterException(new MetierException(null, "erreur.metier.user.rg002"));
        }

        // Controler champs obligatoires - EMAIL
        if(_user == null || StringUtils.isBlank(_user.getEmail())) {
            conteneurException.ajouterException(new MetierException(null, "erreur.metier.user.rg001", MessageHandler
                    .getInstance().getMessage("libelle.email")));
        }
        // Login
        if(_user == null || StringUtils.isBlank(_user.getLogin())) {
            conteneurException.ajouterException(new MetierException(null, "erreur.metier.user.rg001", MessageHandler
                    .getInstance().getMessage("libelle.login")));
        }

        // mdp
        if(_user == null || StringUtils.isBlank(_user.getMdp())) {
            conteneurException.ajouterException(new MetierException(null, "erreur.metier.user.rg001", MessageHandler
                    .getInstance().getMessage("libelle.mdp")));
        }

        // Controler format email
        if(StringUtils.isNotBlank(_user.getEmail()) && !Utils.validerEmail(_user.getEmail())) {
            conteneurException.ajouterException(new MetierException(null, "erreur.metier.user.rg003"));
        }

        if(!conteneurException.isEmpty()) {
            throw conteneurException;
        }

    }
}
